//useSortFilters.tsx
import { useEffect, useState } from "react";
import { useRouter } from "next/router";
import { SortFilters } from "./type";

const useSortFilters = () => {
  const router = useRouter();
  const [filters, setFilters] = useState<SortFilters>({});

  useEffect(() => {
    const { query } = router;
    const newFilters: SortFilters = {};

    // Парсим параметры из URL
    if (query.sort) newFilters.sort = query.sort as string;
    // Обрабатываем brands как массив в любом случае
    if (query.brands) {
      const brandsParam = query.brands as string;
      newFilters.brands = brandsParam
        .split(",")
        .filter((brand) => brand.trim() !== ""); // Убедимся, что нет пустых строк
    }
    if (query.price) {
      const priceRange = (query.price as string)
        .split(",") // Разбиваем диапазон цен по тире
        .map((price) => parseInt(price, 10))
        .filter((price) => !isNaN(price) && price >= 0); // Фильтруем некорректные цены
      newFilters.price = priceRange.length === 2 ? priceRange : undefined;
    }
    if (query.colors) {
      const colorsParam = query.colors as string;
      newFilters.colors = colorsParam
        .split(",")
        .filter((color) => color.trim() !== "");
    }

    setFilters(newFilters);
  }, [router, router.query]);

  const applyFilters = (newFilters: SortFilters) => {
    const queryParams = new URLSearchParams(
      router.query as Record<string, string>
    );

    // Очищаем существующие параметры, которые соответствуют ключам новых фильтров
    Object.keys(newFilters).forEach((key) => {
      queryParams.delete(key);
    });

    // Устанавливаем параметры для фильтрации
    Object.entries(newFilters).forEach(([key, value]) => {
      if (!value || (Array.isArray(value) && value.length === 0)) return;
      const paramValue = Array.isArray(value) ? value.join(",") : value;
      queryParams.set(key, paramValue);
    });

    const queryString = queryParams.toString();
    const url = queryString
      ? `${router.pathname}?${queryString}`
      : router.pathname; // Проверяем, есть ли параметры в URL

    router.push(url);
  };
  const clearFilters = () => {
    router.push(router.asPath.split("?")[0]); // Очищаем URL от всех параметров фильтрации
  };
  return { filters, applyFilters, clearFilters };
};

export default useSortFilters;
